En Elixir, el procesamiento de datos sigue dos filosofías distintas: Avaricioso (Impaciente) y Perezoso. Comprender esta diferencia es fundamental para la eficiencia de memoria y la estabilidad del sistema.
1. El Protocolo Enumerable
Técnicamente, se dice que las cosas que pueden iterarse implementan el protocolo Enumerable. Este contrato común permite que diversas estructuras de datos trabajen con el mismo conjunto de funciones.
2. Módulos Avariciosos frente a Perezosos
El Enum módulo es avaricioso. Potencialmente consume todos los contenidos de una colección de inmediato, creando listas intermedias en cada paso de la tubería. Por el contrario, el Stream módulo es perezoso. El siguiente valor se calcula solo cuando sea necesario.
3. Especificación frente a Resultado
Un valor Stream es una especificación de lo que pretendíamos, pero no el resultado. Los Streams son enumerables y componibles, permitiéndote aplicar transformaciones sin ejecutar trabajo hasta que pases el Stream a un "sumidero" exigente como Enum.to_list/1.
4. Pureza del Paradigma
Combinar paradigmas (funcional y orientado a objetos) reduce los beneficios que ofrece un enfoque funcional. Prefiere transformaciones declarativas sobre bucles imperativos para mayor previsibilidad.